package br.com.guarana.util;

import java.io.IOException;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

/**
 *
 * @author 
 */
public class ServletReport extends HttpServlet {

    private ServletContext sc;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        sc = config.getServletContext();
    }

    @SuppressWarnings("unchecked")
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        List<?> dados = new ArrayList();
        File reportFile = null;
        HashMap parameters = new HashMap();

        String acao = request.getParameter("acao");

        String caminho = getServletConfig().getServletContext().getRealPath("/") +
                "WEB-INF" + File.separator +
                "classes" + File.separator +
                "br" + File.separator +
                "com" + File.separator +
                "guarana" + File.separator +
                "reports";

        
        System.out.println(caminho);
        
        /*
        //recibo de venda
        if (acao.equals("reciboVenda")) {
            int id = Integer.valueOf(request.getParameter("id"));
            List listaDados = new ArrayList();
            listaDados.add(new VendaService().findVenda(id));
            
            dados = listaDados;
            reportFile = new File(caminho + File.separator + "reciboVenda.jasper");
        }

        //recibo de encomenda
        else if (acao.equals("reciboEncomenda")) {
            int id = Integer.valueOf(request.getParameter("id"));
            List listaDados = new ArrayList();
            listaDados.add(new EncomendaService().findEncomenda(id));

            dados = listaDados;
            reportFile = new File(caminho + File.separator + "reciboEncomenda.jasper");
        }
        
        //relatorio de vendas
        else if (acao.equals("relatorioVendas")) {
            try {
                DateFormat formataData = new SimpleDateFormat("yyyy-MM-dd");

                int idCliente = Integer.valueOf(request.getParameter("idCliente"));
                Date dataInicio;
                if (request.getParameter("dataInicio").equals("")) {
                    dataInicio = null;
                } else {
                    dataInicio = formataData.parse(request.getParameter("dataInicio"));
                }
                Date dataFim;
                if (request.getParameter("dataFim").equals("")) {
                    dataFim = null;
                } else {
                    dataFim = formataData.parse(request.getParameter("dataFim"));
                }

                dados = new VendaService().buscaVendas(idCliente, dataInicio, dataFim);
                reportFile = new File(caminho + File.separator + "relatorioVendas.jasper");
            } catch (ParseException ex) {
                ex.printStackTrace();
            }
        }
        
        * //lista de encomendas
        * else if (acao.equals("listaEncomendas")) {
            try {
                DateFormat formataData = new SimpleDateFormat("yyyy-MM-dd");

                String protocolo;
                if (request.getParameter("protocolo").equals("")) {
                    protocolo = null;
                } else {
                    protocolo = request.getParameter("protocolo");
                }
                int idCliente = Integer.valueOf(request.getParameter("idCliente"));
                Date dataInicio;
                if (request.getParameter("dataInicio").equals("")) {
                    dataInicio = null;
                } else {
                    dataInicio = formataData.parse(request.getParameter("dataInicio"));
                }
                Date dataFim;
                if (request.getParameter("dataFim").equals("")) {
                    dataFim = null;
                } else {
                    dataFim = formataData.parse(request.getParameter("dataFim"));
                }
                String finalizado;
                if (request.getParameter("finalizado").equals("")) {
                    finalizado = "T";
                } else {
                    finalizado = request.getParameter("finalizado");
                }
                
                dados = new EncomendaService().buscaEncomendas(protocolo, idCliente, dataInicio, dataFim, finalizado);
                reportFile = new File(caminho + File.separator + "listaEncomendas.jasper");
            } catch (ParseException ex) {
                ex.printStackTrace();
            }
        }       
        

        //relatorio de produtos
        if (acao.equals("relatorioProdutos")) {
            String disponivel = request.getParameter("disponivel");
            int idCategoria = Integer.valueOf(request.getParameter("idCategoria"));  
            
            dados = new ProdutoService().buscaProdutosParaRelatorio(disponivel, idCategoria);
            reportFile = new File(caminho + File.separator + "relatorioProdutos.jasper");
        }        

        //recibo de Pagamento
        else if (acao.equals("reciboPagamento")) {
            int idParcela = Integer.valueOf(request.getParameter("idParcela"));
            List listaDados = new ArrayList();
            AtendimentoParcela atendimentoParcela = new AtendimentoService().reciboPagamento(idParcela);
            listaDados.add(atendimentoParcela);
            
            dados = listaDados;
            reportFile = new File(caminho + File.separator + "reciboPagamento.jasper");
        }

        //recibo de atendimento
        else if (acao.equals("reciboAtendimento")) {
            int id = Integer.valueOf(request.getParameter("id"));
            List listaDados = new ArrayList();
            listaDados.add(new AtendimentoService().findAtendimento(id));

            dados = listaDados;
            reportFile = new File(caminho + File.separator + "reciboAtendimento.jasper");
        }

        byte[] bytes = null;
        JRDataSource jrds = new JRBeanCollectionDataSource(dados);

        try {
            parameters.put("caminho", caminho + File.separator);
            bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, jrds);
        } catch (JRException e) {
            e.printStackTrace();
        }
        * 
        

        if (bytes != null && bytes.length > 0) {
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(bytes, 0, bytes.length);
            ouputStream.flush();
            ouputStream.close();
        }
        
        */        
    }
}
